package top.anydata.lifeofcode.lifesystem.service.sys.user;

import org.springframework.data.domain.Page;
import top.anydata.lifeofcode.lifesystem.dto.sys.user.SysAuthUserDto;
import top.anydata.lifeofcode.lifesystem.web.requests.admin.SigninRequest;
import top.anydata.lifeofcode.lifesystem.web.requests.admin.SignUpRequest;
import top.anydata.lifeofcode.lifesystem.web.responses.admin.JwtAuthenticationResponse;


/**
 * 功能描述: 用户鉴权相关接口
 *
 * @author <a href="mailto:caingao@anydata.top">CainGao</a>
 * @version V_1.0
 * @date 2023/8/31 6:01 PM
 */
public interface IAuthUserService {


    JwtAuthenticationResponse signup(SignUpRequest request);

    JwtAuthenticationResponse signin(SigninRequest request);

    Page<SysAuthUserDto> listUser(Integer page, Integer size);

    void deleteUserById(Integer Id);

    void banUserById(Integer Id);

    void unBanUserById(Integer id);

    void addRoleToUser(Integer userId, Integer roleId);

    void removeRoleFromUser(Integer userId, Integer roleId);

    /**
     * 功能描述: 用户注册
     *
     * @return java.lang.String
     * @date 2023/8/31 6:02 PM
     */
    void addUser(SysAuthUserDto user);

    void updateUser(SysAuthUserDto user);

    /**
     * 功能描述: 用户修改密码
     *
     * @param userName    用户名
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return void
     * @date 2023/8/31 6:02 PM
     */
    void changePassword(String userName, String oldPassword, String newPassword);

    /**
     * 功能描述: 用户重置密码
     *
     * @param userName    用户名
     * @param newPassword 新密码
     * @return void
     * @date 2023/8/31 6:02 PM
     */
    void resetPassword(String userName, String newPassword);

    /**
     * 功能描述: 用户修改用户名
     *
     * @param userName    用户名
     * @param newUserName 新用户名
     * @return void
     * @date 2023/8/31 6:02 PM
     */
    void changeUserName(String userName, String newUserName);

    /**
     * 功能描述: 用户修改邮箱
     *
     * @param userName 用户名
     * @param email    邮箱
     * @return void
     * @date 2023/8/31 6:02 PM
     */
    void changeEmail(String userName, String email);

    /**
     * 功能描述: 用户修改手机号
     *
     * @param userName 用户名
     * @param phone    手机
     * @return void
     * @date 2023/8/31 6:02 PM
     */
    void changePhone(String userName, String phone);

    /**
    * 功能描述: 基于token查询用户信息
    * @author: <a href="mailto:caingao@anydata.top">CainGao</a>
    * @date: 6:09 PM 2024/2/21
    * @param:
    * @return:
    */
    SysAuthUserDto getUserInfoByToken(String token);

}
